// 1.纯数字数组求和
// const arr  = [1,2,3,4,5,6];
// const sum = arr.reduce((prev,cure)=>{
//     return prev + cure;
// },10)
// console.log(sum);

// 2. 对象数组求和
// const result = [
//   { subject: 'math', score: 88 },
//   { subject: 'chinese', score: 95 },
//   { subject: 'english', score: 80 },
// ];

// const totalScore = result.reduce((prev,cure)=>{
//     return prev + cure.score;
// },0)
// console.log('totalScore',totalScore);

// 3.找出最大值
// const a = [23,123,342,12];
// const max = a.reduce((prev,cure)=>{
//    if(prev > cure) {
//     return prev;
//    }
//    return cure;
// },0)
// 第1次循环: prev=0, cure=23
//   0 <= 23 → 保留 23
// 第2次循环: prev=23, cure=123
//   23 <= 123 → 保留 123
// 第3次循环: prev=123, cure=342
//   123 <= 342 → 保留 342
// 第4次循环: prev=342, cure=12
//   342 > 12 → 保留 342
// 最终最大值: 342
// console.log('max',max)

// 4.数组转对象
// const streams = [
//     {name: '技术', id: 1},
//     {name: '设计', id: 2}
// ];
// const obj = streams.reduce((prev,cure)=>{
//     prev[cure.id] = cure;
//     return prev;
// },{});
// console.log(obj);

// 5.数组对象分组
// const people = [
//   { name: 'Alice', age: 21 },
//   { name: 'Max', age: 20 },
//   { name: 'Jane', age: 20 },
// ];

// const groupByAge = people.reduce((prev,cure)=>{
//     const key = cure.age;
//     if(!prev[key]) {
//        prev[key] = [];
//     }
//     prev[key].push(cure);
//     return prev;
// },{});
// 第一次 ： {21:[{name: 'Alice', age: 21 }]}
// 第二次： {21:[{name: 'Alice', age: 21 }],20: [{ name: 'Max', age: 20 }]}
// 第三次：{21:[{name: 'Alice', age: 21 }],20: [{ name: 'Max', age: 20 },{ name: 'Jane', age: 20 }]}
// console.log(groupByAge)

// 6.对象数组去重
// const people = [
//   { name: 'Alice', age: 21 },
//   { name: 'Max', age: 20 },
//   { name: 'Jane', age: 20 },
// ];


// const result = {};
// const uniqueAge = people.reduce((prev,cure)=>{
//     const key = cure.age;
//     if(!result[key]) {
//        result[key] = cure; 
//        prev.push(cure);
//     }
//     return prev;
// },[]);
// console.log(uniqueAge);


// 7.数组扁平化
// const arr = [1,2,[3,4],5,[6],[7,8],9,[10,[11,12,[13]]]];

// function flattenDeep(arr) {
//     return arr.reduce((prev,cure)=>{
//         if(Array.isArray(cure)) {
//             return prev.concat(flattenDeep(cure));
//         }else {
//             return prev.concat(cure);
//         }
//     },[]);
// }
// console.log(flattenDeep(arr));

// 8. 统计字符串出现的次数
const str = 'sfhjasfjgfasjuwqrqadqeiqsajsdaiwqdaklldflas-cmxzmnha';

const strNumObj = str.split('').reduce((prev,cure)=>{
    if(prev[cure]) {
        prev[cure]++
    }else {
        prev[cure] = 1
    }
    return prev;
},{});
console.log(strNumObj)

